#ifndef _M_SRT_H_
#define _M_SRT_H_
#include "m_types.h"
#include "m_pid.h"


/**
 * 获取属性是否被设置过
 *
 * @param pid 属性ID，详见 MSrtTable
 * @return Bool 是否设置过
 */
Int32 MSrtIsSet(MSrtTable pid, Bool *is_set);

/**
 * 获取属性时间戳
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param timestamp 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetTimestamp(MSrtTable pid, UInt32 *timestamp);

/**
 * 获取Bool类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetBool(MSrtTable pid, Bool *value);

/**
 * 设置Bool类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 设置参数值
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetBool(MSrtTable pid, Bool value);

/**
 * 获取UInt8类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetUInt8(MSrtTable pid, UInt8 *value);

/**
 * 设置UInt8类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 设置参数值
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetUInt8(MSrtTable pid, UInt8 value);

/**
 * 获取UInt16类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetUInt16(MSrtTable pid, UInt16 *value);

/**
 * 设置UInt16类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 设置参数值
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetUInt16(MSrtTable pid, UInt16 value);

/**
 * 获取UInt32类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetUInt32(MSrtTable pid, UInt32 *value);

/**
 * 设置UInt32类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 设置参数值
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetUInt32(MSrtTable pid, UInt32 value);

/**
 * 获取Float类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetFloat(MSrtTable pid, Float *value);

/**
 * 设置Float类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 设置参数值
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetFloat(MSrtTable pid, Float value);

/**
 * 获取Double类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 输出缓冲区
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtGetDouble(MSrtTable pid, Double *value);

/**
 * 设置Double类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param value 设置参数值
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetDouble(MSrtTable pid, Double value);

/**
 * 获取Bin类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param buf 输出缓冲区
 * @param buf_size 输出缓冲区的大小
 * @retval >=0 获取长度
 * @retval <0 错误码，详见 MErrCode
 */
Int32 MSrtGetBin(MSrtTable pid, UInt8* buf, Int32 buf_size);

/**
 * 设置Bin类型属性
 *
 * @param pid 属性ID，详见 MSrtTable
 * @param data 输入数据
 * @param data_len 输入数据的长度
 * @return 执行结果，详见 MErrCode
 */
Int32 MSrtSetBin(MSrtTable pid, UInt8* data, Int32 data_len);

#endif // _M_SRT_H_
